package businessObjects;

import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;

import utilities.PasswordHashing;
import utilities.VerificationCarteCredit;

import connection.ConnectionDAO;
import connection.JDCConnection;
import dao.EtudiantDAO;
import model.Etudiant;

public class EtudiantBo {
	private EtudiantDAO dao;
	private ConnectionDAO con;
	
	public EtudiantBo() {
		dao = new EtudiantDAO();
		con = new ConnectionDAO();
	}
	
	/**
	 * Valide si le code universel et le mot de passe fourni existe dans la base de donnees
	 * @param codeUniversel
	 * @param password
	 * @return Retourne true si succes ou false si echec
	 * @throws SQLException 
	 * @throws UnsupportedEncodingException 
	 * @throws NoSuchAlgorithmException 
	 */
	

	public boolean validateUser(String codeUniversel, String password) throws SQLException, NoSuchAlgorithmException, UnsupportedEncodingException {
		JDCConnection c = con.getConnection();
		String hash = new PasswordHashing().getHash(password);
		boolean valid = dao.getValideUser(c, codeUniversel,hash);
		c.close();
		return valid;
	//	return true;
	}
	

	/**
	 * Retourne le profil de l'etudiant
	 * @param idEtudiant
	 * @return Retourne un objet Etudiant
	 * @throws SQLException 
	 */
	public Etudiant getProfile(int idEtudiant) throws SQLException {
		JDCConnection c = con.getConnection();
		Etudiant etu = dao.getEtudiant(c, idEtudiant);
		c.close();
		return etu;

	}
	
	/**
	 * Retourne id de l'etudiant
	 * @param idEtudiant
	 * @return Retourne un objet Etudiant
	 * @throws SQLException 
	 */
	public Etudiant getEtudiantByName(String codeUniversel) throws SQLException {
		JDCConnection c = con.getConnection();
		Etudiant etu = dao.getEtudiantByName(c, codeUniversel);
		c.close();
		return etu;

	}
	
	/**
	 * Sauvegarde le profil de l'etudiant
	 * @param etudiant
	 * @return Retourne true si succes ou false si echec
	 * @throws SQLException 
	 */
	public boolean saveProfile(Etudiant etudiant) throws SQLException {
		JDCConnection c = con.getConnection();
		boolean valid = dao.saveProfile(c, etudiant);
		if(valid) {
			c.commit();
		}
		else {
			c.rollback();
		}
		c.close();
		return valid;
	}
	
	
	
	
	/**
	 * Methode pour payer le solde de l'etudiant
	 * @param userID
	 * @param montant
	 * @param type
	 * @return Retourne true si succes ou false si echec
	 */
	public boolean payerSolde(int idEtudiant, double montant, int type) {
		//TODO
		return true;
	}
	
	/**
	 * Verifie la validite de la carte de credit
	 * @param noCarte, crypto
	 * @return Retourne true si succes ou false si echec
	 */
	public boolean validateCC(String noCarte, String crypto) {
		return new VerificationCarteCredit().validerCC(noCarte, crypto);
	}
}
